Published on

From Hating CPSC 213 to TA-ing It: What Changed

Authors
  • avatar
    Name
    Ina Lee
    Twitter

From Hating CPSC 213 to TA-ing It: What Changed

It was late April, just two weeks after I had taken final exams for Term 2. For the very first time, I received a TA offer for CPSC 213 (Introduction to Computer Systems). It’s actually quite difficult for students to secure a new TA position in the summer, since so many people are trying to gain work experience outside of the regular semesters. The competition gets fierce and most of the positions end up going to returning TAs.

To be honest, I was so surprised (almost shocked) that I got offered a position for CPSC 213. I had taken the course almost two years ago, and I really struggled. I couldn’t understand the point of studying how lower-level systems work. Why should I bother with any of this when I already know how to build applications in Java or Python? Why should I care?

(Funnily enough, I got 97% from the course. But that was before I got into the BCS program, so I had no choice but to give it everything I had to strengthen my application.)

Reviewing CPSC 213 in preparation for my TA job brought back some bad memories, like crying while counting memory reads in practice questions to prep for a quiz. But this time, I started to realize how fundamental the concepts in the course actually are. Looking back, maybe I was even more stressed out because I was also taking CPSC 221 at the same time -- the data structures course that’s considered way more “useful” for preparing for technical interviews.

Fundamental Understanding of Programming Languages

Yes, pointers in C will drive you insane if you started out with higher-level languages like Java or Python. Assembly will freak you out even more. But now I can see how these concepts underlie basically every programming language. It’s kind of like how gravity affects everything in the real world; even if you’re not thinking about it, it’s always there.

Understanding low-level details gives you deeper insight into how programming languages work under the hood. It’s not just syntax and libraries; there are core principles that explain why things behave the way they do.

Performance Optimization

Knowing how registers and memory work is essential when you want to optimize performance. You might not think about this much in lower-level courses, since we often focus on just making the code work, regardless of how efficient it is. But in real-world scenarios where resources are limited, you need to make the most of every bit of memory and CPU cycle.

The concepts from CPSC 213 become like a compass when you’re trying to diagnose performance bottlenecks or write efficient code.

Debugging Skills

CPSC 213 helps you understand low-level bugs and errors that happen way more often than you think — like segfaults and buffer overflows. Sure, someone (or ChatGPT) can tell you that a segfault occurs when you access an invalid memory location. But unless you understand why your program accessed the wrong place, and what memory layout your program is even working with, it’s just words.

This course makes those invisible parts of the system visible, and that’s invaluable when something goes wrong.

Conclusion

Looking back, CPSC 213 wasn’t a course designed to torment me or waste my time. It was the pressure I put on myself — to get a good grade — that made it feel that way. It’s actually a really good course. I was just overwhelmed, and I decided to hate it before giving it a real chance. Maybe I merely didn’t want to leave the comfort zone of Java (my mother tongue, lol).

It’s a bit late, but I’m finally starting to appreciate it. But at the same time, I deeply, deeply sympathize with my students. Honestly, I want to give them so much credit. It’s not easy taking this course in the summer, and they’re doing it anyway, and they're doing great!